/**
 * @author Laboratio Av I
 * @since 18/04/2012 14:03:56
 */
package ar.edu.utn.frgp.banco.dao.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;





import ar.edu.utn.frgp.banco.dao.TransferenciasDao;
import ar.edu.utn.frgp.banco.dao.connection.ConnectionHandler;
import ar.edu.utn.frgp.banco.dao.connection.IConnectionHandler;



import ar.edu.utn.frgp.banco.domain.Transferencia;
import ar.edu.utn.frgp.banco.exceptions.DataAccessException;


public class TransferenciasDaoImpl implements TransferenciasDao {
	
	public void altaTransferencia(Transferencia transferencia) throws DataAccessException {

		PreparedStatement ps = null;
		
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		try {
			
			java.util.Date utilDate = new java.util.Date();
			
			java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

							
			ps = cn.prepareStatement("INSERT INTO transferencias VALUES(?,?,?,?,?)");
			
			ps.setInt   (1, transferencia.getIdtransferencia());
			ps.setInt   (2, transferencia.getNrocuentaorigen());
			ps.setInt   (3, transferencia.getNrocuentadestino());
			ps.setDate  (4, sqlDate);
			ps.setDouble (5, transferencia.getMonto());
			
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(ps, cn);
		}

	}
	
	public List<Transferencia> traerTodasLasTransferencias() throws DataAccessException {
		  Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<Transferencia> transferencias = new ArrayList<Transferencia>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM transferencias");
				
				Transferencia regTransferencias = null;
				
				while (rs.next()) {
					
					regTransferencias = new Transferencia();
					
					regTransferencias.setIdtransferencia(rs.getInt("idtransferencia"));
					regTransferencias.setNrocuentaorigen(rs.getInt("nrocuentaorigen"));
					regTransferencias.setNrocuentadestino(rs.getInt("nrocuentadestino"));
					regTransferencias.setFecha(rs.getDate("fecha"));
					regTransferencias.setMonto(rs.getInt("monto"));
					
					transferencias.add(regTransferencias);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return transferencias;
	}

	@Override
	public List<Transferencia> traerTodasLasTransferenciasPorOrigen(int nrocuenta) throws DataAccessException {
		Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<Transferencia> transferencias = new ArrayList<Transferencia>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM transferencias where transferencias.nrocuentaorigen = "+nrocuenta);
				
				Transferencia regTransferencias = null;
				
				while (rs.next()) {
					
					regTransferencias = new Transferencia();
					
					regTransferencias.setIdtransferencia(rs.getInt("idtransferencia"));
					regTransferencias.setNrocuentaorigen(rs.getInt("nrocuentaorigen"));
					regTransferencias.setNrocuentadestino(rs.getInt("nrocuentadestino"));
					regTransferencias.setFecha(rs.getDate("fecha"));
					regTransferencias.setMonto(rs.getInt("monto"));
					
					transferencias.add(regTransferencias);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return transferencias;
	}

	@Override
	public List<Transferencia> traerTodasLasTransferenciasPorDestino(int nrocuenta) throws DataAccessException {
		Statement st = null;
	      ResultSet rs = null;
			
			IConnectionHandler handler = new ConnectionHandler();
			Connection cn = handler.getConnection();
			
			List<Transferencia> transferencias = new ArrayList<Transferencia>();
			
			try {
				st = cn.createStatement();
				rs = st.executeQuery("SELECT * FROM transferencias WHERE transferencias.nrocuentadestino = " + nrocuenta);
				
				Transferencia regTransferencias = null;
				
				while (rs.next()) {
					
					regTransferencias = new Transferencia();
					
					regTransferencias.setIdtransferencia(rs.getInt("idtransferencia"));
					regTransferencias.setNrocuentaorigen(rs.getInt("nrocuentaorigen"));
					regTransferencias.setNrocuentadestino(rs.getInt("nrocuentadestino"));
					regTransferencias.setFecha(rs.getDate("fecha"));
					regTransferencias.setMonto(rs.getInt("monto"));
					
					transferencias.add(regTransferencias);
				}
						
							
			} catch (SQLException e) {
				System.out.println("Error al crear tablas.");
				e.printStackTrace();			
			} finally {
				handler.closeResources(st, cn);
			}
		return transferencias;
	}

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}